#ifndef DEV_PARAM_FIELD_H
#define DEV_PARAM_FIELD_H

#include <QtCore>

//统一处理配置文件中的各个参数
class CDevParamField
{
public:
    CDevParamField();
    CDevParamField(const QString& strKey, const QString& strShowName, int iValueType, const QString& strDefaultName = "", const QString& strDefaultValue = "");
    ~CDevParamField();

    CDevParamField(const CDevParamField& that);
    CDevParamField& operator=(const CDevParamField& that);

    void CopyFrom(const CDevParamField* pthat);

    void Clear();

    bool operator==(const CDevParamField& that);
    bool operator!=(const CDevParamField& that);

    void InitInt(const QString& strKey, const QString& strShowName, const QString& strDefaultName = "", const QString& strDefaultValue = "");
    void InitFloat(const QString& strKey, const QString& strShowName, const QString& strDefaultName = "", const QString& strDefaultValue = "");

public:
    QString GetKey();
    void SetKey(const QString& strKey);
    QString GetShowName();
    QString GetShowNameWithUnit();
    void SetShowName(const QString& strShowName);
    QString GetDefaultName();
    int GetValueType();
    void SetValueTypeToInt();
    void SetValueTypeToFloat();
    bool IsTypeOfInt();
    bool IsTypeOfFloat();
    int GetValueIndex();
    void SetValueIndex(int iValueIndex);
    QString GetDefaultValue();
    QString GetUnit();
    void SetUnit(const QString& strUnit);
    int GetDataType();
    void SetDataType(int iDataType);
    int GetValueCount();
    bool IsExist(int ivalue);
    QMap<int, QString> GetMapValues();
    QList<QPair<int, QString> > GetListValues();
    void ParseValueList(const QString& strLine);
    void AddInt(int ivalue, const QString& strName);
    void DeleteInt(int ivalue);
    QString GetIntText(int ivalue);
    bool IsNeedUpdate();
    int GetUpdateType();
    void SetUpdateType(int ivalue);

private:
    QString             m_strKey;                   //字段的key,比如Strategy/StrategySet/Warn0/Warn1，需要保持唯一
    QString             m_strShowName;              //显示名称
    int                 m_iUpdateType;              //值变化后是否需要更新(重新读取):0不更新,1需更新
    QString             m_strDefaultName;           //默认名称
    int                 m_iValueType;               //0为INT类型,1为FLOAT类型

    int                 m_iValueIndex;
    QString             m_strDefaultValue;          //默认值
    QString             m_strUnit;                  //值的单位名称
    int                 m_iDataType;                //字段的数据类型
    QMap<int, QString>  m_mapValue2Name;            //值map,key为值,value为值对应的名称
};
#endif //DEV_PARAM_FIELD_H
